// 给你一个整数数组 nums，每次 操作 会从中选择一个元素并 将该元素的值减少 1。
// 如果符合下列情况之一，则数组 A 就是 锯齿数组：
//     每个偶数索引对应的元素都大于相邻的元素，即 A[0] > A[1] < A[2] > A[3] < A[4] > ...
//     或者，每个奇数索引对应的元素都大于相邻的元素，即 A[0] < A[1] > A[2] < A[3] > A[4] < ...
// 返回将数组 nums 转换为锯齿数组所需的最小操作次数。

// 示例 1：
// 输入：nums = [1,2,3]
// 输出：2
// 解释：我们可以把 2 递减到 0，或把 3 递减到 1。

// 示例 2：
// 输入：nums = [9,6,1,6,2]
// 输出：4

// 提示：
//     1 <= nums.length <= 1000
//     1 <= nums[i] <= 1000

/**
 * @param {number[]} nums
 * @return {number}
 */
var movesToMakeZigzag = function(nums) {
    ////两种情况分别算算需要多少次，取小值
    if (nums.length <= 2) return 0;
    let count1 = 0, count2 = 0;
    let arr1 = [...nums];
    for(let i = 1; i < arr1.length; i += 2) {
        if (arr1[i - 1] && arr1[i] <= arr1[i - 1]) {
            
            count1 += (arr1[i - 1] - arr1[i] + 1);
            arr1[i - 1] -= (arr1[i - 1] - arr1[i] + 1);
        }
        if (arr1[i + 1] && arr1[i] <= arr1[i + 1]) {
            
            count1 += (arr1[i + 1] - arr1[i] + 1);
            arr1[i + 1] -= (arr1[i + 1] - arr1[i] + 1);
        }
    }
    let arr2 = [...nums];
    for(let i = 0; i < arr2.length; i += 2) {
        if (arr2[i - 1] && arr2[i] <= arr2[i - 1]) {
            
            count2 += (arr2[i - 1] - arr2[i] + 1);
            arr2[i - 1] -= (arr2[i - 1] - arr2[i] + 1);
        }
        if (arr2[i + 1] && arr2[i] <= arr2[i + 1]) {
            
            count2 += (arr2[i + 1] - arr2[i] + 1);
            arr2[i + 1] -= (arr2[i + 1] - arr2[i] + 1);
        }
    }
    return Math.min(count1, count2);
};

console.log(movesToMakeZigzag([10,1,1,6,6,6,1,8,8,5,1,2,6,6,6,4,4,8,7,1]));

